Ansible 部署Nginx项目的playbook实践
工作中经常需要搭建项目的业务环境.需要部署同一套nginx站点业务在联调,测试,预发布,生产等各种不同环境的服务器上.这些工作主要包括两个部分:创建web资源目录,nginx站点配置.
下面来看看如何使用playbook来自动化部署项目到不同环境的多台服务器上:
准备工作
1.创建主机inventory清单
1 | [root@ansible host_vars]$vim /etc/ansible/hosts |
1.变量文件
由于不同的服务器所属不同的环境.所以需要为不同的主机定义所属环境的变量.利用ansible的host_vars主机变量可以轻松实现:
- 创建主机变量目录:
1 | mkidr /etc/ansible/host_vars |
- 为每台主机创建变量文件,定义dwd_env变量.这个变量代表了主机所在的环境,
1 | [root@ansible host_vars]$vim host100 |
一台远程主机属于beta环境,另外一台属于dev环境.
host_vars目录下的文件名和inventory主机清单的主机名要保持一致,只要是主机名文件内的变量都会自动被ansible调用在这台主机下
2.nginx的站点配置文件
这里定义两个站点文件,分别是openapi和internalapi的2套项目环境.配置文件由于需要调用变量,所以使用template模板功能可以很好的满足我们的需求.
- 在playbook目录下创建template目录
1 | mkdir /etc/ansible/playbook/template |
- 创建internalapi的nginx虚拟主机
1 | [root@ansible template]$vim nginx-internal.conf |
这里为了演示,所以配置文件比较简单.当然结合template的变量,循环,条件判断等功能,也可以根据需求编写出复杂的nginx站点配置文件
- 创建openapi的nginx虚拟主机
1 | [root@ansible template]$vim nginx-open.conf |
3. 创建nginx的index.html首页文件.这里为了演示也只是编写一个简单文件
1 | #创建file目录,用于统一存放Playbook的文件 |
编排playbook
nginx所需的配置文件和资源站点文件都准备完毕后,就可以编排playbook了.
playbook大致分为以下几个tasks:
- 检查nginx是否安装,(如果是新服务器,或者在nginx服务器上添加新项目,则步骤可略)
- 添加nginx的yum源,安装nginx (同上)
- 创建nginx站点资源目录
- 在该目录下,创建nginx主页文件
- 创建nginx虚拟主机配置文件(重启nginx服务)
- 启动nginx
下面是具体的Playbook文件
1 | [root@ansible playbook]$cat nginx_env.yml |
执行完毕后,可以在两台节点上检查是否按我们需求创建正确的目录和文件:
1 | # 在beta环境服务上,创建了正确的目录结构和首页文件 |
在另外一台服务器上检查结果如下:
1 | # 创建了正确的dev环境目录: |
可见所有的目录和配置文件都按我们需求做到自动化部署,这为我们节省了大量的时间,工作效率大幅提升.而且也能很轻松的胜任更复杂的项目环境配置工作